<?php

namespace App\VO\Cart;

use App\BO\Order\OrderRemarkLabel\OrderRemarkLabel;
use App\VO\ABaseVO;
use App\VO\Cart\MetaInfo\CouponInfo;
use App\VO\Cart\MetaInfo\ProductSkuInfo;
use App\VO\Cart\MetaInfo\UserAddressInfo;

class CartIndexVO extends ABaseVO
{
    /**
     * 默认用户地址
     * @var UserAddressInfo
     */
    public $address;

    /**
     * 产品信息
     * @var ProductSkuInfo
     */
    public $productSku;

    /**
     * 购买数量
     * @var int
     */
    public $num;

    /**
     * 可用的账户余额
     * @var string
     */
    public $amount = '0';

    /**
     * 可用的优惠券
     * @var CouponInfo[]
     */
    public $useAbleCoupons = [];

    /**
     * 可用的优惠券
     * @var CouponInfo[]
     */
    public $unUseAbleCoupons = [];

    /**
     * 下单备注标签
     * @var array
     */
    public $orderRemarkLabels = [];

    /**
     * @var string
     */
    public $assignDate;

    /**
     * @var int
     */
    public $assignTime;

    /**
     * @var string
     */
    public $assignTimeDes;

    public function __construct()
    {
        $this->orderRemarkLabels = OrderRemarkLabel::getLabels();
    }

    /**
     * @param string $amount
     */
    public function setAmount(string $amount): void
    {
        $this->amount = $amount;
    }

    /**
     * @param int $num
     */
    public function setNum(int $num): void
    {
        $this->num = $num;
    }

    /**
     * @param ProductSkuInfo $productSku
     */
    public function setProductSku(ProductSkuInfo $productSku): void
    {
        $this->productSku = $productSku;
    }

    /**
     * @param CouponInfo[] $useAbleCoupons
     */
    public function setUseAbleCoupons(array $useAbleCoupons): void
    {
        $this->useAbleCoupons = $useAbleCoupons;
    }

    /**
     * @param int $assignTime
     */
    public function setAssignTime(int $assignTime): void
    {
        $this->assignTime = $assignTime;
    }

    /**
     * @param string $assignDate
     */
    public function setAssignDate(string $assignDate): void
    {
        $this->assignDate = $assignDate;
    }

    /**
     * @param UserAddressInfo $address
     */
    public function setAddress(UserAddressInfo $address): void
    {
        $this->address = $address;
    }

    /**
     * @param string $assignTimeDes
     */
    public function setAssignTimeDes(string $assignTimeDes): void
    {
        $this->assignTimeDes = $assignTimeDes;
    }

    /**
     * @param CouponInfo[] $unUseAbleCoupons
     */
    public function setUnUseAbleCoupons(array $unUseAbleCoupons): void
    {
        $this->unUseAbleCoupons = $unUseAbleCoupons;
    }
}
